/*
 * @文件描述: 
 * @版本: 
 * @作者: 周晨阳
 * @Date: 2021-08-17 09:59:04
 */
#include "TOUCH.h"
#ifdef  WIN_SIM
/*
 * @文件描述: 电容屏的驱动，暂时用模拟I2C驱动
 * @版本: 
 * @作者: 周晨阳
 * @Date: 2021-01-26 15:06:59
 */
#include "TOUCH.h"

#define IIC_delay 2
/****************************************************************************************
		电容屏 I2C 底层驱动


***************************************************************************************/

//*************************************************
//函数名称 : void Touch_Init(void)
//功能描述 : 设置触屏的IIC引脚,用软件模拟的方法实现IIC功能

//*************************************************
void Touch_Init(void)
{
    // GPIO_InitTypeDef GPIO_InitStructure;

    // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能GPIOB时钟

    // //GPIOB10,B11初始化设置
    // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;      //普通输出模式
    // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;     //推挽输出
    // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
    // GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;       //上拉
    // GPIO_Init(GPIOB, &GPIO_InitStructure);             //初始化
    // IIC_SCL = 1;
    // IIC_SDA = 1;
    // //
    // I2C1_Stop();
    printf("touch init done...\n");
}
void I2C1_Delay_us(u16 cnt)
{
    volatile u16 i;
    for (i = 0; i < cnt * 4; i++)
        ;
}

/************************************************
*	函 数 名: I2C_Start
*	功能说明: CPU发起I2C总线启动信号
在SCK高电平期间，SDA一个下降沿，即构成了IIC的起始信号
//START:when CLK is high,DATA change form high to low
**************************************************/
void I2C1_Start(void)
{
    // SDA_OUT(); //sda线输出
    // IIC_SDA = 1;
    // IIC_SCL = 1;
    // I2C1_Delay_us(4);
    // IIC_SDA = 0; //START:when CLK is high,DATA change form high to low
    // I2C1_Delay_us(4);
    // IIC_SCL = 0; //钳住I2C总线，准备发送或接收数据
}

/****************************************************
*	函 数 名: I2C_Stop
*	功能说明: CPU发起I2C总线停止信号
在SCK高电平期间，SDA一个上升沿，即构成了IIC的终止信号
//STOP:when CLK is high DATA change form low to high
****************************************************/
void I2C1_Stop(void)
{
    // SDA_OUT(); //sda线输出
    // IIC_SCL = 0;
    // IIC_SDA = 0; //STOP:when CLK is high DATA change form low to high
    // I2C1_Delay_us(4);
    // IIC_SCL = 1;
    // IIC_SDA = 1; //发送I2C总线结束信号
    // I2C1_Delay_us(4);
}

/************************************** 
*	函 数 名: I2C_Ack
*	功能说明: CPU产生一个ACK信号
*	形    参：无
*	返 回 值: 无 
**************************************/
void I2C1_Ack(void)
{
    // IIC_SCL = 0;
    // SDA_OUT();
    // IIC_SDA = 0;
    // I2C1_Delay_us(2);
    // IIC_SCL = 1;
    // I2C1_Delay_us(2);
    // IIC_SCL = 0;
}
/*
*************************************************
*	函 数 名: I2C_NoAck
*	功能说明: CPU产生1个NACK信号
*	形    参：无
*	返 回 值: 无
*************************************************
*/
void I2C1_NoAck(void)
{
    // IIC_SCL = 0;
    // SDA_OUT();
    // IIC_SDA = 1;
    // I2C1_Delay_us(2);
    // IIC_SCL = 1;
    // I2C1_Delay_us(2);
    // IIC_SCL = 0;
}
/*************************************************************
*	函 数 名: I2C_WaitAck
*	功能说明: CPU产生一个时钟，并读取器件的ACK应答信号
*	形    参：无
*	返 回 值: 返回0表示正确应答，1表示无器件响应
*************************************************************/
uint8_t I2C1_WaitAck(void)
{
    // u8 ucErrTime = 0;
    // SDA_IN(); //SDA设置为输入
    // IIC_SDA = 1;
    // I2C1_Delay_us(1);
    // IIC_SCL = 1;
    // I2C1_Delay_us(1);
    // while (READ_SDA)
    // {
    //     ucErrTime++;
    //     if (ucErrTime > 250)
    //     {
    //         I2C1_Stop();
    //         return 1;
    //     }
    // }
    // IIC_SCL = 0; //时钟输出0
    // return 0;
}

void I2C1_Send_Byte(uint8_t dat)
{
    // u8 t;
    // SDA_OUT();
    // IIC_SCL = 0; //拉低时钟开始数据传输
    // for (t = 0; t < 8; t++)
    // {
    //     IIC_SDA = (dat & 0x80) >> 7;
    //     dat <<= 1;
    //     I2C1_Delay_us(2); //对TEA5767这三个延时都是必须的
    //     IIC_SCL = 1;
    //     I2C1_Delay_us(2);
    //     IIC_SCL = 0;
    //     I2C1_Delay_us(2);
    // }
}

/************************************************
*	函 数 名: I2C_Read_Byte
*	功能说明: CPU从I2C总线设备读取8bit数据
*	形    参：无
*	返 回 值: 读到的数据
*************************************************/
//读1个字节，ack=1时，发送ACK，ack=0，发送nACK
uint8_t I2C1_Read_Byte(uint8_t ack)
{

    // unsigned char i, receive = 0;
    // SDA_IN(); //SDA设置为输入
    // for (i = 0; i < 8; i++)
    // {
    //     IIC_SCL = 0;
    //     I2C1_Delay_us(2);
    //     IIC_SCL = 1;
    //     receive <<= 1;
    //     if (READ_SDA)
    //         receive++;
    //     I2C1_Delay_us(1);
    // }
    // if (!ack)
    //     I2C1_NoAck(); //发送nACK
    // else
    //     I2C1_Ack(); //发送ACK
    // return receive;
}

/****************************************************************************************
电容屏 FT6336芯片驱动

***************************************************************************************/

uint8_t FT6206_Read_Reg(uint8_t *pbuf, uint32_t len)
{

    // int8_t i = 0;

    // I2C1_Start();
    // I2C1_Send_Byte(FT6206_ADDR);
    // I2C1_WaitAck();

    // I2C1_Send_Byte(0);
    // I2C1_WaitAck();
    // I2C1_Stop();

    // I2C1_Start();
    // I2C1_Send_Byte(FT6206_ADDR + 1);
    // I2C1_WaitAck();

    // for (i = 0; i < len; i++)
    // {
    //     if (i == (len - 1))
    //         *(pbuf + i) = I2C1_Read_Byte(0);
    //     else
    //         *(pbuf + i) = I2C1_Read_Byte(1);
    // }
    // I2C1_Stop();

    // return 0;
}

static u8 a, buf[10];
volatile static u16 touchX = 0, touchY = 0, lastY = 0;

int get_MeasureX(void)
{
    
    
    return get_MeasureX_FromSDL();
}

int get_MeasureY(void)
{

   
    return get_MeasureY_FromSDL();
}

void Touch_Test(void)
{
    int16_t x1, y1;

    while (1)
    {
        //		FT6206_Write_Reg1(0,0);
        //
        //		a = FT6206_Read_Reg1(0);
        //		GUI_DispDecAt(a, 0, 200, 4);
        //
        //		a = FT6206_Read_Reg1(0xa3);
        //		GUI_DispDecAt(a, 0, 0, 4);
        //
        //		a = FT6206_Read_Reg1(0xa6);
        //		GUI_DispDecAt(a, 100, 0, 4);
        //
        //		a = FT6206_Read_Reg1(0xa8);
        //		GUI_DispDecAt(a, 200, 0, 4);

        //		a = FT6206_Read_Reg1(0xa7);
        //		GUI_DispDecAt(a, 300, 0, 4);

        FT6206_Read_Reg((uint8_t *)&buf, 7);

        if ((buf[2] & 0x0f) == 1)
        {
            //读出的数据位480*800
            x1 = (int16_t)(buf[3] & 0x0F) << 8 | (int16_t)buf[4];
            y1 = (int16_t)(buf[5] & 0x0F) << 8 | (int16_t)buf[6];
        }
        else
        {
            x1 = 0xFFFF;
            y1 = 0xFFFF;
        }
        printf("x:%d,y:%d\n", x1, y1);
    }
}

#endif